/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controleur;

import DAO.DAOFactory;
import DAO.IncidentDAOmysql;
import DAO.TypeIncidentDAOmysql;
import DAO.VeloDAOmysql;
import Modele.Incident;
import Modele.TypeIncident;
import Modele.Velo;
import Utils.Constantes;
import Vue.NouvelIncident;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author 20cent
 */
public class NouvelIncidentControleur {

    protected ArrayList<TypeIncident> typeIncidents;
    protected NouvelIncident vue;

    public NouvelIncidentControleur(NouvelIncident vue) {
        typeIncidents = new ArrayList<TypeIncident>();
        this.vue = vue;
    }

    /**
     * controle l'insertion d'un incident
     *
     * @param no_serie
     * @param typeinc_id
     * @param commentaire
     * @throws NumberFormatException
     * @throws ControleurException
     */
    public void valideFormulaire(String no_serie, int typeinc_id, String commentaire) throws NumberFormatException {
        //on vérifie si le numéro de série est bien un nombre

        int number = Integer.parseInt(no_serie);

        new AssyncCreationIncident(number, typeinc_id, commentaire).start();
    }

    public void recupererTypesIncidents() {
        new Thread() {
            @Override
            public void run() {
                super.run();
                TypeIncidentDAOmysql dao = new TypeIncidentDAOmysql(DAOFactory.getInstance());
                typeIncidents = dao.getAll(1);
                vue.setList(typeIncidents);
            }
        }.start();
    }

    private class AssyncCreationIncident extends Thread {

        private int no_serie;
        private int typeinc_id;
        private String commentaire;

        public AssyncCreationIncident(int no_serie, int typeinc_id, String commentaire) {
            super();
            this.no_serie = no_serie;
            this.typeinc_id = typeinc_id;
            this.commentaire = commentaire;
        }

        @Override
        public void run() {
            super.run();
            DAOFactory factory = DAOFactory.getInstance();
            VeloDAOmysql veloDao = new VeloDAOmysql(factory);
            IncidentDAOmysql incidentDAO = new IncidentDAOmysql(factory);

            //on récupère l'id correspondant en BDD
            Velo velo = veloDao.getBySerial(no_serie);
            //si le numéro de série n'existe pas, on prévient la rue
            if (velo == null) {
                JOptionPane.showMessageDialog(vue,
                        "Le numéro de velo n'existe pas.", "Erreur", JOptionPane.WARNING_MESSAGE);
            } else {
                //insertion en BDD
                Incident incident = new Incident(Constantes.STATUT_OUVERT, Constantes.PRIORITE_MOYENNE, commentaire);
                incidentDAO.save(incident, velo.getMId(), typeinc_id);
                JOptionPane.showMessageDialog(vue,
                        "Votre message a bien été enregistré.");
                vue.reset();
            }
            vue.activerBouton();
        }
    }
}
